#
# Rubin
# 2018-09-07
#
# 对于现有的统计报表excel文件，使用Python对excel报表文件进行读取，经过统计处理，得到想要的统计结果报表。
# 读取Book1.xls文件，数据演示的各排污企业各排污口二氧化硫排放量，需要根据各排污口的数据合并计算出各企业的二氧化硫排放量
#
# 读取统计报告excel文件
# 将每一行内容读取出来，需要将合并的内容读取出来
# 合并计算排放量等数据，企业各排污口数据进行按企业合并
# 报告格式要求：
#     1、文件名统一，book1.xls
#     2、内容放在第一个sheet中
#     3、第1行为表头header
#
import xlrd
import xlwt
from datetime import date,datetime
#import conn_mysqldb as mysqldb

#处理合并项，(i,j)单元格内容为空时，向前一行查找，返回值：cell对象
def mergeItem(sheet,i,j):
    #print("查找合并项")
    r=i
    while r>0:
        #print(sheet.cell(r,j).value)
        if sheet.cell(r,j).value != "":
            return sheet.cell(r,j)
        else:
            r-=1

#读取报表excel文件
def read_excel():
    workbook=xlrd.open_workbook("book1.xls")  #打开excel文件
    style0=xlwt.easyxf('font:name Times New Roman, color-index red,bold on', num_format_str='#,##0.00')  #excel单元格写入样式
    style1=xlwt.easyxf(num_format_str='YYYY-MM-DD')  #excel单元格写入样式
    wb=xlwt.Workbook()  #excel写入工作表文件
    ws=wb.add_sheet('report sheet')  #新增sheet
    ws.write(0,0,"企业")  #写入表头单元格内容
    ws.write(0,1,"1月份SO2排放量（kg）")  #写入表头单元格内容
    ws.write(0,2,"2月份SO2排放量（kg）")  #写入表头单元格内容
    out_rows=1;  #输出excel行数


    #根据sheet索引或者名称获取sheet内容
    sheet1=workbook.sheet_by_index(0)  #sheet索引从0开始，固定在第1个sheet中

    #sheet的名称，行数，列数
    print("sheet名称：",sheet1.name,"共",sheet1.nrows,"行",sheet1.ncols,"列")

   
    #表头header
    header_col_1=sheet1.cell_value(0,0)  #第1列
    header_col_2=sheet1.cell_value(0,1)  #第2列
    header_col_3=sheet1.cell_value(0,2)  #第3列
    header_col_4=sheet1.cell_value(0,3)  #第4列

    #打印header
    print(header_col_1,header_col_2,header_col_3,header_col_4)

    #企业和值记录
    col3_sum=0   #第3列企业和值
    col4_sum=0   #第4列企业和值

    #记录上一行企业
    col1_last=""
    
    #打印各行各单元格数据
    for i in range(1,sheet1.nrows):
        colval_1=mergeItem(sheet1,i,0).value
        colval_2=mergeItem(sheet1,i,1).value
        colval_3=sheet1.cell(i,2).value
        colval_4=sheet1.cell(i,3).value

        #企业变化时，先计算企业和值，写入文件，然后继续该行显示
        if col1_last!=colval_1 and col1_last!="":  #企业变化
            print(col1_last,col3_sum, col4_sum)
            #写入excel输出文件
            ws.write(out_rows,0,col1_last)  #写入单元格内容
            ws.write(out_rows,1,col3_sum)  #写入单元格内容
            ws.write(out_rows,2,col4_sum)  #写入单元格内容
            out_rows+=1

            #和值清零
            col3_sum=0
            col4_sum=0

        print(colval_1,colval_2,colval_3,colval_4)  #打印该行数据
        col3_sum+=float(colval_3)  #加入和值
        col4_sum+=float(colval_4)

        #最后一行后处理
        if i==sheet1.nrows-1:  #最后一行
            print(colval_1,col3_sum, col4_sum)
            #写入excel输出文件
            ws.write(out_rows,0,colval_1)  #写入单元格内容
            ws.write(out_rows,1,col3_sum)  #写入单元格内容
            ws.write(out_rows,2,col4_sum)  #写入单元格内容

        #记录企业
        col1_last=colval_1

    wb.save('book1_out.xls')  #保存到excel文件
        
if __name__ == '__main__':
    read_excel()
